using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using SIP.PN.FrontEnd.Code;
using SIP.PN.Servicios.Interfaces.DTO;

namespace SIP.PN.FrontEnd.controles
{
    public partial class BuscadorTareaOperario : ControlAbstracto
    {
        #region Propiedades

        private int CodigoProyecto
        {
            get { return (int)ViewState["CodigoProyecto"]; }
            set { ViewState["CodigoProyecto"] = value; }
        }

        private int CodigoProyectoTrabajo
        {
            get { return (int)ViewState["CodigoProyectoTrabajo"]; }
            set { ViewState["CodigoProyectoTrabajo"] = value; }
        }

        private int CodigoProyectoTarea
        {
            get { return (int)ViewState["CodigoProyectoTarea"]; }
            set { ViewState["CodigoProyectoTarea"] = value; }
        }

        private string CodigoEspecialidad
        {
            get { return (string)ViewState["CodigoEspecialidad"]; }
            set { ViewState["CodigoEspecialidad"] = value; }
        }

        private DateTime FechaInicio
        {
            get { return (DateTime)ViewState["FechaInicio"]; }
            set { ViewState["FechaInicio"] = value; }
        }

        private DateTime FechaFin
        {
            get { return (DateTime)ViewState["FechaFin"]; }
            set { ViewState["FechaFin"] = value; }
        }

        #endregion

        #region Metodos Publicos

        public void Inicializar(int codigoProyecto, int codigoProyectoTrabajo, int codigoProyectoTarea)
        {
            CodigoProyecto = codigoProyecto;
            CodigoProyectoTrabajo = codigoProyectoTrabajo;
            CodigoProyectoTarea = codigoProyectoTarea;

            ProyectoTareaDTO entidad = SrvProyecto.ObtenerProyectoTarea(CodigoProyecto, CodigoProyectoTrabajo, CodigoProyectoTarea);

            CodigoEspecialidad = entidad.Tarea.Especialidad.Codigo;
            FechaInicio = entidad.FechaInicio;
            FechaFin = entidad.FechaFinEsperado;

            #region Nivel
            
            ddl_nivel.Items.Clear();
            IList<NivelEspecialidadDTO> list = new List<NivelEspecialidadDTO>();
            IList<ProyectoTareaRequisitoDTO> requisitos = SrvProyecto.ListarProyectoTareaRequisito(CodigoProyecto, CodigoProyectoTrabajo, CodigoProyectoTarea);
            foreach (ProyectoTareaRequisitoDTO requisito in requisitos)
            {
                NivelEspecialidadDTO ne = new NivelEspecialidadDTO();
                ne.Codigo = requisito.CodigoNivelEspecialidad;
                ne.Nombre = requisito.NivelEspecialidad;
                if (!list.Contains(ne))
                    list.Add(ne);
            }
            Utilidades.BindearComboBox(ddl_nivel, list, "Nombre", "Codigo", true);
            up_BuscadorTareaOperario.Update();

            #endregion

            Buscar();
        }

        public override void Seguridad()
        {
        }

        public void ResetearFormulario()
        {
            txt_apellido.Text = string.Empty;
            txt_nombre.Text = string.Empty;
            ddl_nivel.Items.Clear();
        }

        protected void Buscar()
        {
            IList<ProyectoTareaAsignacionDTO> data = SrvOperario.ListarProyectoTareaAsignacion(FechaInicio, FechaFin,txt_apellido.Text, txt_nombre.Text, CodigoEspecialidad, ddl_nivel.SelectedValue);
            grd_listado.DataSource = data;
            grd_listado.DataBind();
        }

        public void Mostrar()
        {
            mpe_BuscadorTareaOperario.Show();
        }

        public void Ocultar()
        {
            mpe_BuscadorTareaOperario.Hide();
        }

        #endregion

        #region Eventos

        private event EventHandler<BuscadorEventArgs> seleccionar;
        public event EventHandler<BuscadorEventArgs> Seleccionar
        {
            add { seleccionar += value; }
            remove { seleccionar -= value; }
        }

        private event EventHandler<EventArgs> cancelar;
        public event EventHandler<EventArgs> Cancelar
        {
            add { cancelar += value; }
            remove { cancelar -= value; }
        }

        protected void btn_cancelar_Click(object sender, EventArgs e)
        {
            if (cancelar != null)
                cancelar(this, new EventArgs());
            Ocultar();
        }

        protected void btn_seleccionar_Click(object sender, EventArgs e)
        {
            ImageButton btn = (ImageButton)sender;
            
            if (seleccionar != null)
                seleccionar(this, new BuscadorEventArgs(btn.CommandArgument, ""));
            Ocultar();
        }

        protected void btn_buscar_Click(object sender, EventArgs e)
        {
            Buscar();
        }

        #endregion
    }
}